package org.wyy.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.wyy.tcc.TccTxManagerTemplate;
import org.wyy.tcc.TransactionalContext;

/**
 * 购物流程TCC事务管理器
 *
 *      注入ShopTxManager,调用execute(),
 *          返回true表示成功
 *          false表示失败且回滚数据
 *
 * @author wangyuanye
 * @date 2024/7/22
 **/
@Component
public class ShopTxManager extends TccTxManagerTemplate {
    @Autowired
    TccEditInventory tccEditInventory;
    // 注入当前场景所需的所有服务依赖
    @Autowired
    TccEditInventory orderTcc; // 模拟使用
    @Autowired
    TccEditInventory pointsTcc; // 模拟使用

    @Override
    protected boolean tryOperations(TransactionalContext context) {
        // 此处定义特定场景(购物)下各个服务的执行流程,可以参数传递
        if(tccEditInventory.tryOperation(context)){
            if(orderTcc.tryOperation(context)) {
                if(pointsTcc.tryOperation(context)) {
                    // 相关环节的try阶段全部成功,说明成功
                    return true;
                }
            }
        }
        return false;
    }

    @Override
    protected boolean confirmOperations(TransactionalContext context) {
        if(tccEditInventory.confirmOperation(context)){
            if(orderTcc.confirmOperation(context)) {
                if(pointsTcc.confirmOperation(context)) {
                    // 相关环节的confirm阶段全部成功,说明成功
                    return true;
                }
            }
        }
        return false;
    }

    @Override
    protected boolean cancelOperations(TransactionalContext context) {
        // 业务补偿逻辑
        return false;
    }
}
